package com.xszx.servicebase.exceptionhandler;

import com.xszx.commonutils.ExceptionUtil;
import com.xszx.commonutils.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @Author: 白熊
 * @Date: 2024/7/9 16:12
 */
//统一异常处理类
@ControllerAdvice
@Slf4j//日志注释
public class GlobalExceptionHandler {

    @ResponseBody//自定义异常
    @ExceptionHandler(QinXueException.class)//导入自定义异常类
    public R error(QinXueException e){
//        e.printStackTrace();  去掉本来的打印异常语句,改用日志文件的
//        log.error(e.getMessage());
        log.error(ExceptionUtil.getMessage(e));
        //R.error().  message(e.getMsg()).    code(e.getCode())
        return R.error().message(e.getMsg()).code(e.getCode());
    }
    @ResponseBody//走的是精准原则,谁的异常类型最准确就用谁的
    @ExceptionHandler(ArithmeticException.class)//指定异常类型为算数异常
    public R error(ArithmeticException e){
//        e.printStackTrace();  去掉本来的打印异常语句,改用日志文件的
//        log.error(e.getMessage());//将日志堆栈信息输出到文件
        log.error(ExceptionUtil.getMessage(e));//调用这个方法是因为,咱自己写的异常类里面写的就是在这个,只不过是太像了
        return R.error().message("发生指定异常,请联系管理员解决");
    }
    @ExceptionHandler(Exception.class)//异常类型  最大的异常类
    @ResponseBody//直接打给前端
    public R error(Exception e){
//        e.printStackTrace();  去掉本来的打印异常语句,改用日志文件的
//        log.error(e.getMessage());
        log.error(ExceptionUtil.getMessage(e));
        return R.error().message("出错了,请及时联系管理员解决");
    }
}
